iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
DevOps

持續測試三十天系列 第 28

[Day 28] HttpRunner 測試用例分層

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20191013/20120775uHKzI4FbJv.png
在 HttpRunner 中,測試用例組織主要基於三個概念:

  1. 測試用例集 (testsuite),對應一個文件夾,包含單個或多個測試用例(YAML/JSON)文件
  2. 測試用例 (testcase),對應一個 YAML/JSON 文件,包含單個或多個測試步驟。
  3. 測試步驟 (teststep),對應 YAML/JSON 文件中的一個 test,描述單次接口測試的全部內容,包括發起接口請求、解析響應結果、校驗結果等。

今天將使用 day28 的 Code 來說明 HttpRunner 的測試用例分層機制。

HttpRunner 的測試用例分層,共有 3 層,以下是各階層的相依

  1. API 層,無相依。
  2. TestCase 層,TestCase -> API
  3. TestSuite 層,TestSuite -> TestCase -> API
    定義完成後,這 3 層都可以單獨運行。

.env 環境變數設定

base_url=https://www.google.com

API 層

首先來看看,最小單位的 api 層,一個 yml 檔裡定義一隻 api,例如 google_search.yml
官方建議定義 API 的 url method headers params request body 等。
validate 通常只定義預期的 status_code

name: google search
base_url: ${ENV(base_url)}
variables:
  keyword: httprunner in api
request:
  url: /search
  method: GET
  params:
    q: $keyword
validate:
  - eq: ["status_code", 200]

定義完的 API 可以單獨運行,

cd day28

hrun api/google_search.yml

https://ithelp.ithome.com.tw/upload/images/20191014/20120775161n5qYYRd.png

執行成功,而且請注意這時候使用的變數 keyword: httprunner in api
https://ithelp.ithome.com.tw/upload/images/20191014/20120775txCvxBv7Dl.png

TestCase 層

再來看看 testcase 層,一個 yml 檔裡可以定義多個 teststep in teststeps,例如 validate_title.yml
官方建議,將 validate 盡量都寫在 testcase 層,處理跟測試邏輯測試流程相關的設定。
testcase 層 的 variables, validate 可覆蓋 api 層 的設定

config:
  name: testcase validate search result
  base_url: ${ENV(base_url)}
  variables:
    keyword: httprunner in testcase # testcase 層 的 variables 可覆蓋 api 層

teststeps:
  - name: validate title
    api: api/google_search.yml # 引用 api 層
    extract:
      - title: "<title>(.*)</title>"
    validate:
      - startswith: ["$title", "$keyword"] # validate 邏輯判斷盡量在 testcase 層 

定義完的 TestCase 可以單獨運行,

cd day28

hrun testcases/validate_title.yml

https://ithelp.ithome.com.tw/upload/images/20191014/20120775DoVh2QQ2oy.png

執行成功,而且請注意這時候使用的變數 keyword: httprunner in testcase
https://ithelp.ithome.com.tw/upload/images/20191014/20120775HzQugv0IGt.png

TestSuite 層

最後來看看 testsuite 層,一個 yml 檔裡可以定義多個 testcase in testcases,例如 google_search.yml
官方建議,將 testcase 的組織test data 的組織 放在 testsuite 層
也就是說 testsuite 層 不應該有邏輯,而是為了把 測試案例和測試資料結合

PS. day29 講參數化資料驅動測試,會更能看出 testsuite 層 的作用

config:
  name: "testsuite google search"
  base_url: ${ENV(base_url)}
  variables:
    keyword: httprunner in testsuite # 應該由 testsuite 控制 test data 的組織 

testcases:                           # 應該由 testsuite 控制 testcase 的組織 
  - name: call validate_title
    testcase: testcases/validate_title.yml
  - name: call validate_title2
    testcase: testcases/validate_title.yml

定義完的 TestSuite 可以單獨運行,

cd day28

hrun testsuites/google_search.yml

https://ithelp.ithome.com.tw/upload/images/20191014/201207756RsVOPYQbM.png

執行成功,而且請注意這時候使用的變數 keyword: httprunner in testsuite
https://ithelp.ithome.com.tw/upload/images/20191014/20120775Bwu2OqsKxw.png


上一篇
[Day 27] HttpRunner 快速上手
下一篇
[Day 29] HttpRunner 參數化資料驅動測試
系列文
持續測試三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言